#pragma once

#include "MysqlResult.h"

namespace mysql {

    class MysqlStatement {

    public:

        // 构造函数，初始化 MySQL 连接和预处理语句对象
        explicit MysqlStatement(MYSQL *conn);

        // 析构函数，释放预处理语句对象
        ~MysqlStatement() { mysql_stmt_close(stmt_); }

        /**
          * @brief  执行非查询语句
          * @retval 非查询语句返回结果
          */
        bool execute(const std::string &sql);

        /**
          * @brief  执行查询语句并返回结果集
          * @param  sql 要执行的sql
          * @retval 结果集
          */
        MysqlResult executeQuery(const std::string &sql);

        /**
          * @brief  获取受影响的行数
          * @retval 受影响的行数
          */
        unsigned long getUpdateCount() const { return mysql_stmt_affected_rows(stmt_); }

    private:

        // MySQL 连接对象
        MYSQL *conn_;

        // 预处理语句对象
        MYSQL_STMT *stmt_;

    };

}
